/* SGATOR
 * base/dsaa.h
 */

#ifndef SGDSAA_H
#define SGDSAA_H

#include "types.h"

#define SG_SBLSZ 8

#define MAX(a, b) (a < b ? b : a)
#define MIN(a, b) (a < b ? a : b)

typedef struct
{
  SgUInt _rs;
  SgUInt sz;
  void **ps;
} SgStack;

SgStack *sg_stack_make();
void sg_stack_push(SgStack *s, void *data);
void *sg_stack_pop(SgStack *s);
void sg_stack_remf(SgStack *s, SgULong i);
SgLong sg_stack_find(SgStack *s, void *data);
void sg_stack_free(SgStack *s);

typedef struct _SgList
{
  void *data;
  struct _SgList *prev;
  struct _SgList *next;
} SgList;

void sg_list_free(SgList *ls);
SgList *sg_list_insert(SgList *ls, void *data);
SgList *sg_list_append(SgList *ls, void *data);
SgList *sg_list_remlnk(SgList *ls, SgList *c);
SgList *sg_list_apply(SgList *ls, void (*fun)(void *data));
SgList *sg_list_find(SgList *ls, void *data);

#endif

/* end */

